/*
 * Copyright (C) Hisilicon Technologies Co., Ltd. 2018-2019. All rights reserved.
 * Description:
 * Author:
 * Create: 2018-05-19
 */

#ifndef __HI_RUNTIME_API__
#define __HI_RUNTIME_API__

#include "hi_type.h"
#include "hi_runtime_comm.h"

#ifdef __cplusplus
#if __cplusplus
extern "C" {
#endif
#endif /* __cplusplus */

/*****************************************************************************
*   Prototype    : HI_SVPRT_RUNTIME_Init
*   Description  : Environment Init
*   Parameters   : HI_CHAR *pszGlobalSetting            GlobalSetting for runtime
                                                        if NULL, use default
                   HI_RUNTIME_MEM_CTRL_S *pstMemCtrl    Memory Controll by alloc,flush,and free
                                                        if NULL, use mmz
*   Return Value : HI_SUCCESS: Success; Error codes: Failure.
*****************************************************************************/
HI_S32 HI_SVPRT_RUNTIME_Init(IN const HI_CHAR *pszGlobalSetting, IN HI_RUNTIME_MEM_CTRL_S *pstMemCtrl);

/*****************************************************************************
*   Prototype    : HI_SVPRT_RUNTIME_LoadModelGroupSync
*   Description  : Load model
*   Parameters   : HI_CHAR*                   pstModelGroupConfig    Input Group Config
                   HI_RUNTIME_GROUP_INFO_S*   pstModelGroupAttr      Group Info, such as wk,cop,connector
                   HI_RUNTIME_GROUP_HANDLE*   phGroupHandle          output Group Handle
*   Return Value : HI_SUCCESS: Success; Error codes: Failure.
*****************************************************************************/
HI_S32 HI_SVPRT_RUNTIME_LoadModelGroup(IN const HI_CHAR *pstModelGroupConfig,
                                       IN HI_RUNTIME_GROUP_INFO_S *pstModelGroupAttr,
                                       OUT HI_RUNTIME_GROUP_HANDLE *phGroupHandle);

/*****************************************************************************
*   Prototype    : HI_SVPRT_RUNTIME_ForwardGroupSync
*   Description  : Perform prediction on input sample(s), and output responses for corresponding sample(s), Sync Fuction
*   Parameters   : HI_RUNTIME_GROUP_HANDLE               hGroupHandle    Group Handle generated by HI_SVPRT_RUNTIME_LoadModelGroup
*                  HI_RUNTIME_GROUP_SRC_BLOB_ARRAY_PTR   pstSrc           Input Blobs
*                  HI_RUNTIME_GROUP_DST_BLOB_ARRAY_PTR   pstDst           Output Blobs.
*   Return Value: HI_SUCCESS: Success; Error codes: Failure.
*****************************************************************************/
HI_S32 HI_SVPRT_RUNTIME_ForwardGroupSync(IN const HI_RUNTIME_GROUP_HANDLE hGroupHandle,
                                         IN const HI_RUNTIME_GROUP_SRC_BLOB_ARRAY_PTR pstSrc,
                                         OUT HI_RUNTIME_GROUP_DST_BLOB_ARRAY_PTR pstDst,
                                         IN HI_U64 u64SrcId);

/*****************************************************************************
*   Prototype    : HI_SVPRT_RUNTIME_ForwardGroupASync
*   Description  : Perform prediction on input sample(s), and output responses for corresponding sample(s),ASync Function
*   Parameters   : HI_RUNTIME_GROUP_HANDLE               hGroupHandle    Group Handle generated by HI_SVPRT_RUNTIME_LoadModelGroup
                                                                     can't be NULL
*                  HI_RUNTIME_GROUP_SRC_BLOB_ARRAY_PTR   pstSrc      Input Blobs
*                  HI_RUNTIME_GROUP_DST_BLOB_ARRAY_PTR   pstDst      Output Blobs.
*                  HI_U64                                u64SrcId    Frame id set by user,
*                                                                    can be duplicate number
*                  HI_RUNTIME_Forward_CallBack           pCbFun      Callback for ForwardGroup,
*                                                                    can't be null
*   Return Value: HI_SUCCESS: Success; Error codes: Failure.
*****************************************************************************/
HI_S32 HI_SVPRT_RUNTIME_ForwardGroupASync(IN const HI_RUNTIME_GROUP_HANDLE hGroupHandle,
                                          IN const HI_RUNTIME_GROUP_SRC_BLOB_ARRAY_PTR pstSrc,
                                          OUT HI_RUNTIME_GROUP_DST_BLOB_ARRAY_PTR pstDst,
                                          IN HI_U64 u64SrcId, IN HI_RUNTIME_Forward_Callback pCbFun);

/*****************************************************************************
*   Prototype    : HI_SVPRT_RUNTIME_UnloadModel
*   Description  : Unload model
*   Parameters   : HI_RUNTIME_GROUP_HANDLE   hGroupHandle           Group Handle generated by HI_SVPRT_RUNTIME_LoadModelGroup
*                                                                    can not be NULL
*
*   Return Value : HI_SUCCESS: Success; Error codes: Failure.
*****************************************************************************/
HI_S32 HI_SVPRT_RUNTIME_UnloadModelGroup(IN const HI_RUNTIME_GROUP_HANDLE hGroupHandle);

/*****************************************************************************
*   Prototype    : HI_SVPRT_RUNTIME_deInit
*   Description  : Environment DeInit
*   Return Value : HI_SUCCESS: Success; Error codes: Failure.
*****************************************************************************/
HI_S32 HI_SVPRT_RUNTIME_DeInit();

#ifdef __cplusplus
#if __cplusplus
}
#endif
#endif /* __cplusplus */

#endif /* __HI_RUNTIME_API__ */
